set -e
#新建一个单独的目录
cd /
#mkdir vita

#进入vita目录
cd vita
mkdir build cross-tool cross-gcc-tmp sysroot

cd source

binutils_url="http://mirrors.ustc.edu.cn/gnu/binutils/binutils-2.23.1.tar.bz2"
gcc_url="http://mirrors.ustc.edu.cn/gnu/gcc-4.7.3/gcc-4.7.3.tar.bz2"
gmp_url="http://mirrors.ustc.edu.cn/gnu/gmp/gmp-5.0.5.tar.bz2"
mpfr_url="http://mirrors.ustc.edu.cn/gnu/mpfr/mpfr-3.1.2.tar.bz2"
mpc_url="http://mirrors.ustc.edu.cn/gnu/mpc/mpc-1.0.2.tar.gz"

linux_url="https://www.kernel.org/pub/linux/kernel/v3.x/linux-3.7.4.tar.bz2"
glibc_url="http://mirrors.ustc.edu.cn/gnu/glibc/glibc-2.17.tar.xz"

if [ ! -f "binutils-2.23.1.tar.bz2" ]; then
wget $binutils_url
fi 
if [ ! -f "gcc-4.7.3.tar.bz2" ]; then
wget $gcc_url
fi 
if [ ! -f "gmp-5.0.5.tar.bz2" ]; then
wget $gmp_url
fi 
if [ ! -f "mpfr-3.1.2.tar.bz2" ]; then
wget $mpfr_url
fi 
if [ ! -f "mpc-1.0.2.tar.gz" ]; then
wget $mpc_url
fi 
if [ ! -f "linux-3.7.4.tar.bz2" ]; then
wget $linux_url
fi 
if [ ! -f "glibc-2.17.tar.xz" ]; then
wget $glibc_url
fi 

cd ..

#在文件最后添加以下语句
unset LANG
export HOST=$MACHTYPE  #echo $MACHTYPE 查看当前主机中该值
export BUILD=$HOST
export TARGET=i686-pc-linux-gnu
export CROSS_TOOL=/vita/cross-tool
export CROSS_GCC_TMP=/vita/cross-gcc-tmp
export SYSROOT=/vita/sysroot
PATH=$CROSS_TOOL/bin:$CROSS_GCC_TMP/bin:/sbin:/usr/sbin:$PATH


#注意以下命令中按tab键自动补齐命令时最后不要有空格

#进入/vita/build目录
cd /vita/build
#解压安装binutils
tar xvf ../source/binutils-2.23.1.tar.bz2
#创建单独构建binutils目录并进入该目录
mkdir binutils-build
cd binutils-build
#配置binutils
../binutils-2.23.1/configure --prefix=$CROSS_TOOL --target=$TARGET --with-sysroot=$SYSROOT
make
make install

#安装freestanding gcc
cd /vita/build
tar xvf ../source/gcc-4.7.3.tar.bz2
#进入gcc源码目录
cd gcc-4.7.3/

#gmp库 
tar xvf ../../source/gmp-5.0.5.tar.bz2
mv gmp-5.0.5/ gmp

#数学库MPFR：
tar xvf ../../source/mpfr-3.1.2.tar.bz2
mv mpfr-3.1.2/ mpfr

#数学库MPC：
tar xvf ../../source/mpc-1.0.2.tar.gz
mv mpc-1.0.2/ mpc


################################关键命令 执行一下命令避免在安装glibc时出现undefied reference to '__stack_chk_guard'的错误
sed -i '/k prot/agcc_cv_libc_provides_ssp=yes' gcc/configure


cd ..

#创建单独构建gcc的目录
mkdir gcc-build
cd gcc-build/

#配置gcc
../gcc-4.7.3/configure \
--prefix=$CROSS_GCC_TMP \
--target=$TARGET \
--with-sysroot=$SYSROOT \
--with-newlib --enable-languages=c \
--with-mpfr-include=/vita/build/gcc-4.7.3/mpfr/src \
--with-mpfr-lib=/vita/build/gcc-build/mpfr/src/.libs \
--disable-shared --disable-threads --disable-decimal-float \
--disable-libquadmath --disable-libmudflap --disable-libgomp --disable-nls --disable-libssp

make
make install


#进入临时gcc安装目录
cd /vita/cross-gcc-tmp
ln -s libgcc.a lib/gcc/i686-pc-linux-gnu/4.7.3/libgcc_eh.a


#安装内核头文件
cd /vita/build
tar xvf ../source/linux-3.7.4.tar.bz2
cd linux-3.7.4/
make mrproper
make ARCH=i386 headers_check
make ARCH=i386 INSTALL_HDR_PATH=$SYSROOT/usr/ headers_install  #############注意headers_install前有个空格



#安装glibc
cd /vita/build
tar xvf ../source/glibc-2.17.tar.xz
mkdir glibc-build
cd glibc-build/

#配置glibc

../glibc-2.17/configure --prefix=/usr --host=$TARGET --enable-kernal=3.7.4 --enable-add-ons --with-headers=$SYSROOT/usr/include libc_cv_forced_unwind=yes libc_cv_c_cleanup=yes libc_cv_ctors_header=yes

make
make install_root=$SYSROOT install


#进入gcc-build目录，构建最后的完整的gcc

cd /vita/build/gcc-build
rm -rf *
#最后构建完整gcc命令
../gcc-4.7.3/configure --prefix=$CROSS_TOOL --target=$TARGET \
--with-sysroot=$SYSROOT --with-mpfr-include=/vita/build/gcc-4.7.3/mpfr/src \
--with-mpfr-lib=/vita/build/gcc-build/mpfr/src/.libs \
--enable-languages=c,c++ --enable-threads=posix


make
make install


##################查看交叉编译环境
make -p | grep CC


